package com.beikai.mybatisplus.user.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.beikai.mybatisplus.user.model.UserModel;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author beikai
 * @since 2019-06-15
 */
public interface IUserService extends IService<UserModel> {

    List<UserModel> getAllUser1();
    List<UserModel> getAllUser2();
    List<UserModel> getAllUser3();

    UserModel getAllUserById1(Long id);
    UserModel getAllUserById2(Long id);
    UserModel getAllUserById3(Long id);

    boolean add(UserModel userModel);
    boolean add(String name,Integer age,String email);

    boolean addBatchUser(List<UserModel> userModels);

    boolean addBatchUserByNum(List<UserModel> userModels, Integer num);

    boolean addBatchUserOrUpdate(List<UserModel> userModels);

    boolean addBatchUserOrUpdateByNum(List<UserModel> userModels, Integer num);

    boolean addUserOrUpdate(UserModel userModels);

    boolean removeByMap2(String name, Integer age, String email);

    boolean removeByWrapper(String name, Integer age, String email);

    boolean myUpdate(UserModel userModel);

    Collection<UserModel> getByMap(Long id, String name, String email, Integer age);

    List<Map<String,Object>> getByResultMap(String name, String email, Integer age, Long id);

    /**
     * 插入数据
     * @param userModel
     * @return
     */
    public int insert(UserModel userModel);

    /**
     * 通过id 删除记录
     * @param id
     * @return
     */
    public int deleteById(Long id);

    /**
     * 通过 map 条件 删除记录
     * @param id
     * @param name
     * @param email
     * @param age
     * @return
     */
    public int deleteByMap(Long id,String name,String email,Integer age);
    /**
     * 通过制定条件 删除
     * @param age
     * @return
     */
    public int delete(Integer age);

    /**
     * 通过 id 集合 批量删除
     * @param ids
     * @return
     */
    public int deleteBatchIds(List<Long> ids);

    /**
     * 通过主键修改记录信息
     * @param userModel
     * @return
     */
    public int updateById2(UserModel userModel);

    /**
     * 设置制定条件 修改
     * @param userModel
     * @return
     */
    public int update2(UserModel userModel);

    /**
     * 通过 id 获取记录
     * @param id
     * @return
     */
    public UserModel selectById(Long id);

    /**
     * 通过主键集合获取记录信息
     * @param ids
     * @return
     */
    public List<UserModel> selectBatchIds(List<Long> ids);

    /**
     * 根据 map 参数 获取用户信息
     * @param id
     * @param name
     * @param email
     * @param age
     * @return
     */
    public List<UserModel> selectByMap(Long id,String name,String email,Integer age);


    /**
     * 通过条件获取一条用户过记录
     * @param id
     * @return
     */
    public UserModel selectOne(Long id);

    /**
     * 根据条件统计数量
     * @param age
     * @return
     */
    public Integer selectCount(Integer age);

    /**
     * 通过 名字查询 用户记录  模糊搜索
     * @param name
     * @return
     */
    public List<UserModel> selectList(String name);

    /**
     * 通过名字查询 用户记录 模糊搜索 返回 map 类型集合
     * @param name
     * @return
     */
    public List<Map<String,Object>> selectMaps(String name);

    /**
     * 根据 wapper 条件,查询所有记录,
     * @param name
     * @return
     */
    public List<Object> selectObjs(String name);

    /**
     * 分页 获取 指定条件 记录信息
     * @param pageNum
     * @param pageSize
     * @param name
     * @return
     */
    public IPage<UserModel> selectPage(Integer pageNum, Integer pageSize, String name);

    /**
     * 通过条件返回map类型的信息,并分页
     * @param pageNum
     * @param pageSize
     * @param name
     * @return
     */
    public IPage<Map<String,Object>> selectMapsPage(Integer pageNum,Integer pageSize, String name);

    boolean mydelete(Long id);

    List<UserModel> testAllEq(String name, String email, Integer age, Long id,Integer age1);


    List<UserModel> testAllEq2(List<Long> ids);

}
